# Maintainer: Alexey Pavlov <alexpux@gmail.com>
# Maintainer: Ray Donnelly <mingw.android@gmail.com>
# Maintainer: Naveen M K <naveen521kk@gmail.com>
# Contributor: Saul Ibarra Corretge <saghul@gmail.com>
# Contributor: Frode Solheim <frode@fs-uae.net>

_primary_python="yes"
_pybasever=3.14
_realname=python

if [[ "${_primary_python}" == "yes" ]]; then
  pkgbase="mingw-w64-${_realname}"
  pkgname=("${MINGW_PACKAGE_PREFIX}-${_realname}")
  provides=("${MINGW_PACKAGE_PREFIX}-python3"
            "${MINGW_PACKAGE_PREFIX}-python${_pybasever}")
  conflicts=("${MINGW_PACKAGE_PREFIX}-python3"
             "${MINGW_PACKAGE_PREFIX}-python${_pybasever}"
            "${MINGW_PACKAGE_PREFIX}-python2<2.7.16-7")
  replaces=("${MINGW_PACKAGE_PREFIX}-python3"
            "${MINGW_PACKAGE_PREFIX}-python${_pybasever}")
else
  pkgbase="mingw-w64-${_realname}${_pybasever}"
  pkgname=("${MINGW_PACKAGE_PREFIX}-${_realname}${_pybasever}")
fi
pkgver=${_pybasever}.4
pkgrel=1
pkgdesc="A high-level scripting language (mingw-w64)"
arch=('any')
mingw_arch=('mingw32' 'mingw64' 'ucrt64' 'clang64' 'clangarm64')
license=('spdx:PSF-2.0')
url="https://www.python.org/"
msys2_repository_url="https://github.com/python/cpython"
msys2_references=(
  "cpe: cpe:/a:python:python"
  "cpe: cpe:/a:python_software_foundation:python"
)
depends=("${MINGW_PACKAGE_PREFIX}-cc-libs"
         "${MINGW_PACKAGE_PREFIX}-expat"
         "${MINGW_PACKAGE_PREFIX}-bzip2"
         "${MINGW_PACKAGE_PREFIX}-libffi"
         "${MINGW_PACKAGE_PREFIX}-mpdecimal"
         "${MINGW_PACKAGE_PREFIX}-ncurses"
         "${MINGW_PACKAGE_PREFIX}-openssl"
         "${MINGW_PACKAGE_PREFIX}-sqlite3"
         "${MINGW_PACKAGE_PREFIX}-tcl"
         "${MINGW_PACKAGE_PREFIX}-tk"
         "${MINGW_PACKAGE_PREFIX}-zlib"
         "${MINGW_PACKAGE_PREFIX}-libb2"
         "${MINGW_PACKAGE_PREFIX}-xz"
         "${MINGW_PACKAGE_PREFIX}-tzdata")
makedepends=(
  "${MINGW_PACKAGE_PREFIX}-cc"
  "${MINGW_PACKAGE_PREFIX}-autotools"
  "autoconf-archive"
)
#options=('debug' '!strip')
source=("https://www.python.org/ftp/python/${pkgver%rc?}/Python-${pkgver}.tar.xz"
        "EXTERNALLY-MANAGED"
        0001-build-add-with-nt-threads-and-make-it-default-on-min.patch
        0002-build-Define-MS_WINDOWS-and-others-when-compiling-wi.patch
        0003-sysmodule-Implement-flags-_is_mingw-is_mingw_ucrt-an.patch
        0004-configure-add-MACHDEP-and-platform-on-MINGW.patch
        0005-build-Add-default-cross-configuration-for-MINGW.patch
        0006-configure-enable-largefile-support-by-default-for-Mi.patch
        0007-build-Add-PC-to-CPPFLAGS-and-to-SRCDIRS-on-Mingw.patch
        0008-build-add-MINGW-support-for-posixmodule.patch
        0009-exports.h-Add-support-for-MINGW.patch
        0010-configure-add-options-so-that-shared-build-is-possib.patch
        0011-build-Add-PYD_PLATFORM_TAG.patch
        0012-build-Add-dynload_win-support-for-MinGW.patch
        0013-build-Use-.pyd-extension-suffix-fix-import-lib-insta.patch
        0014-build-Configure-SOABI-and-EXT_SUFFIX-for-MINGW.patch
        0015-build-Define-MS_DLL_ID-for-sys.winver-on-MINGW.patch
        0016-build-Ignore-main-program-for-frozen-scripts-on-MING.patch
        0017-socketmodule-add-MINGW-support.patch
        0018-build-enable-winreg-msvcrt-_winapi-winsound-and-_ove.patch
        0019-sysconfig-make-_sysconfigdata.py-relocatable.patch
        0020-sysconfig-treat-MINGW-builds-as-POSIX-builds.patch
        0021-sysconfig-Change-the-get_platform-method-in-sysconfi.patch
        0022-build-semi-native-build-sysconfig.patch
        0023-ctypes-Add-support-for-stdcall-without-underscore.patch
        0024-ctypes-add-suppor-for-ctypes.pythonapi-under-MINGW.patch
        0025-ctypes-find_library-c-should-return-None-with-ucrt.patch
        0026-site-Customize-for-MINGW.patch
        0027-site-Change-user-site-packages-path-to-include-the-e.patch
        0028-python-config-output-Windows-paths-for-the-shell-var.patch
        0029-python-config-use-the-Python-variant-of-python-confi.patch
        0030-mingw-prefer-unix-sep-if-MSYSTEM-environment-variabl.patch
        0031-build-Remove-MAXPATHLEN-default.patch
        0032-build-dont-link-with-gettext.patch
        0033-use-gnu_printf-in-format.patch
        0034-build-remove-usage-of-MS_COREDLL.patch
        0035-getcompiler-expose-MINGW-toolchain-related-informati.patch
        0036-build-fix-signal-module-build.patch
        0037-build-build-winconsoleio-and-_testconsole.patch
        0038-multiprocessing-expose-sem_unlink-to-fix-multiproces.patch
        0039-build-link-win-resource-files-and-build-pythonw.patch
        0040-pycore_fileutils-add-MINGW-support.patch
        0041-configure-fix-inet_pton-check.patch
        0042-importlib-bootstrap-path-sep.patch
        0043-configure-set-MINGW-stack-reserve.patch
        0044-tests-fix-test_bytes.patch
        0045-timemodule-add-MINGW-support.patch
        0046-configure-Disable-checks-for-dlopen-dlfcn.patch
        0047-venvlauncher-Build-venvlauncher.exe-from-PC-launcher.patch
        0048-venvlauncher-try-looking-for-the-versioned-.exe-firs.patch
        0049-venvlauncher-Skip-find-python-in-Registry-for-mingw-.patch
        0050-configure-don-t-check-for-clock_-functions.patch
        0051-CI-test-the-build-and-add-some-mingw-specific-tests.patch
        0052-configure-Default-to-without-c-locale-coercion-on-Wi.patch
        0053-tests-Fix-some-failing-tests.patch
        0054-build-def-VPATH-when-compiling-Python-sysmodule.c.patch
        0055-configure-correctly-find-native-python.patch
        0056-build-Add-extra-flags-for-_bootstrap_python.patch
        0057-getpath-add-support-for-mingw.patch
        0058-build-Don-t-build-_posixsubprocess-on-Windows.patch
        0059-ssl-module-add-MINGW-support.patch
        0060-configure-Include-winsock.h-when-checking-for-netdb-.patch
        0061-configure-always-build-_multiprocessing-on-Windows.patch
        0062-configure-build-mmap-module-on-win32.patch
        0063-configure-set-BUILDEXEEXT-and-EXEEXT.patch
        0064-configure-fix-building-some-test-modules.patch
        0065-Always-convert-to-before-passing-though-pathcch-func.patch
        0066-pylifecycle.h-remove-conflicting-_Py_CheckPython3-de.patch
        0067-dynload_win-add-env-var-for-reverting-the-legacy-DLL.patch
        0068-dynload_win-Port-GetPythonImport-to-MINGW.patch
        0069-dynload_win-make-sure-to-only-use-backslashes-for-pa.patch
        0070-dynload_win-don-t-run-_Py_CheckPython3-for-MINGW-bui.patch
        0071-build-Build-and-install-libpython3.dll-stable-ABI.patch
        0072-configure-define-_DEBUG-for-a-debug-build.patch
        0073-configure-fix-multiprocessing-module.patch
        0074-build-add-MINGW-support-for-selectmodule.patch
        0075-configure-disable-various-modules-on-MINGW.patch
        0076-configure-Add-libraries-to-fix-ctypes-on-MINGW.patch
        0077-configure-Enable-_uuid-on-MINGW.patch
        0078-configure-make-incompatible-pointer-types-a-warning.patch
        0079-tests-test_makefile-normalize-path.patch
        0080-Fix-include-naming-for-cross-build.patch
        0081-Fix-format-warning.patch
        0082-Fix-pragma-warnings.patch
        0083-math-pyhash-MINGW-support.patch
        0084-tests-Fix-test-for-library-name.patch
        0085-dictobject-MINGW-support.patch
        0086-build-Fix-export-Py_GetBuildInfo-symbol.patch
        0087-build-Allow-profile-tests-failure.patch
        0088-build-add-support-for-building-C-modules.patch
        0089-build-build-fix-the-wmi-module.patch
        0090-Fix-exports-for-_suggestions-module.patch
        0091-compileall-Normalize-paths.patch
        0092-configure-enable-64-bit-time-support-for-32-bit-buil.patch
        0093-configure-Work-around-broken-pc-file.patch
        0094-makesetup-make-sure-a-library-path-is-passed-when-bu.patch
        0095-venv-also-install-the-versioned-launchers.patch
        0096-configure-set-_WIN32_WINNT-version.patch
        0097-tests-fix-sysconfig.test_get_platform.patch
        0098-pycore_time-fix-missing-timeval.patch
        0099-mmapmodule-define-DONT_USE_SEH.patch
        0100-build-Add-ABIFLAGS-to-targets-when-needed.patch
        0101-sysconfig-patch-nt-schemes-again.patch
        0102-configure-define-_PYTHREAD_NAME_MAXLEN-for-MINGW.patch
        0103-configure-allow-older-autoconf.patch
        0104-tests-allow-sys.abiflags-to-exist.patch
        0105-configure-fix-AC_PATH_TOOL-usage.patch
        0106-makesetup-make-sure-to-link-the-built-libpython.patch)

# Helper macros to help make tasks easier #
apply_patch_with_msg() {
  for _patch in "$@"
  do
    msg2 "Applying ${_patch}"
    patch -Nbp1 -i "${srcdir}/${_patch}"
  done
}

prepare() {
  cd "${srcdir}/Python-${pkgver}"

 apply_patch_with_msg 0001-build-add-with-nt-threads-and-make-it-default-on-min.patch \
  0002-build-Define-MS_WINDOWS-and-others-when-compiling-wi.patch \
  0003-sysmodule-Implement-flags-_is_mingw-is_mingw_ucrt-an.patch \
  0004-configure-add-MACHDEP-and-platform-on-MINGW.patch \
  0005-build-Add-default-cross-configuration-for-MINGW.patch \
  0006-configure-enable-largefile-support-by-default-for-Mi.patch \
  0007-build-Add-PC-to-CPPFLAGS-and-to-SRCDIRS-on-Mingw.patch \
  0008-build-add-MINGW-support-for-posixmodule.patch \
  0009-exports.h-Add-support-for-MINGW.patch \
  0010-configure-add-options-so-that-shared-build-is-possib.patch \
  0011-build-Add-PYD_PLATFORM_TAG.patch \
  0012-build-Add-dynload_win-support-for-MinGW.patch \
  0013-build-Use-.pyd-extension-suffix-fix-import-lib-insta.patch \
  0014-build-Configure-SOABI-and-EXT_SUFFIX-for-MINGW.patch \
  0015-build-Define-MS_DLL_ID-for-sys.winver-on-MINGW.patch \
  0016-build-Ignore-main-program-for-frozen-scripts-on-MING.patch \
  0017-socketmodule-add-MINGW-support.patch \
  0018-build-enable-winreg-msvcrt-_winapi-winsound-and-_ove.patch \
  0019-sysconfig-make-_sysconfigdata.py-relocatable.patch \
  0020-sysconfig-treat-MINGW-builds-as-POSIX-builds.patch \
  0021-sysconfig-Change-the-get_platform-method-in-sysconfi.patch \
  0022-build-semi-native-build-sysconfig.patch \
  0023-ctypes-Add-support-for-stdcall-without-underscore.patch \
  0024-ctypes-add-suppor-for-ctypes.pythonapi-under-MINGW.patch \
  0025-ctypes-find_library-c-should-return-None-with-ucrt.patch \
  0026-site-Customize-for-MINGW.patch \
  0027-site-Change-user-site-packages-path-to-include-the-e.patch \
  0028-python-config-output-Windows-paths-for-the-shell-var.patch \
  0029-python-config-use-the-Python-variant-of-python-confi.patch \
  0030-mingw-prefer-unix-sep-if-MSYSTEM-environment-variabl.patch \
  0031-build-Remove-MAXPATHLEN-default.patch \
  0032-build-dont-link-with-gettext.patch \
  0033-use-gnu_printf-in-format.patch \
  0034-build-remove-usage-of-MS_COREDLL.patch \
  0035-getcompiler-expose-MINGW-toolchain-related-informati.patch \
  0036-build-fix-signal-module-build.patch \
  0037-build-build-winconsoleio-and-_testconsole.patch \
  0038-multiprocessing-expose-sem_unlink-to-fix-multiproces.patch \
  0039-build-link-win-resource-files-and-build-pythonw.patch \
  0040-pycore_fileutils-add-MINGW-support.patch \
  0041-configure-fix-inet_pton-check.patch \
  0042-importlib-bootstrap-path-sep.patch \
  0043-configure-set-MINGW-stack-reserve.patch \
  0044-tests-fix-test_bytes.patch \
  0045-timemodule-add-MINGW-support.patch \
  0046-configure-Disable-checks-for-dlopen-dlfcn.patch \
  0047-venvlauncher-Build-venvlauncher.exe-from-PC-launcher.patch \
  0048-venvlauncher-try-looking-for-the-versioned-.exe-firs.patch \
  0049-venvlauncher-Skip-find-python-in-Registry-for-mingw-.patch \
  0050-configure-don-t-check-for-clock_-functions.patch \
  0051-CI-test-the-build-and-add-some-mingw-specific-tests.patch \
  0052-configure-Default-to-without-c-locale-coercion-on-Wi.patch \
  0053-tests-Fix-some-failing-tests.patch \
  0054-build-def-VPATH-when-compiling-Python-sysmodule.c.patch \
  0055-configure-correctly-find-native-python.patch \
  0056-build-Add-extra-flags-for-_bootstrap_python.patch \
  0057-getpath-add-support-for-mingw.patch \
  0058-build-Don-t-build-_posixsubprocess-on-Windows.patch \
  0059-ssl-module-add-MINGW-support.patch \
  0060-configure-Include-winsock.h-when-checking-for-netdb-.patch \
  0061-configure-always-build-_multiprocessing-on-Windows.patch \
  0062-configure-build-mmap-module-on-win32.patch \
  0063-configure-set-BUILDEXEEXT-and-EXEEXT.patch \
  0064-configure-fix-building-some-test-modules.patch \
  0065-Always-convert-to-before-passing-though-pathcch-func.patch \
  0066-pylifecycle.h-remove-conflicting-_Py_CheckPython3-de.patch \
  0067-dynload_win-add-env-var-for-reverting-the-legacy-DLL.patch \
  0068-dynload_win-Port-GetPythonImport-to-MINGW.patch \
  0069-dynload_win-make-sure-to-only-use-backslashes-for-pa.patch \
  0070-dynload_win-don-t-run-_Py_CheckPython3-for-MINGW-bui.patch \
  0071-build-Build-and-install-libpython3.dll-stable-ABI.patch \
  0072-configure-define-_DEBUG-for-a-debug-build.patch \
  0073-configure-fix-multiprocessing-module.patch \
  0074-build-add-MINGW-support-for-selectmodule.patch \
  0075-configure-disable-various-modules-on-MINGW.patch \
  0076-configure-Add-libraries-to-fix-ctypes-on-MINGW.patch \
  0077-configure-Enable-_uuid-on-MINGW.patch \
  0078-configure-make-incompatible-pointer-types-a-warning.patch \
  0079-tests-test_makefile-normalize-path.patch \
  0080-Fix-include-naming-for-cross-build.patch \
  0081-Fix-format-warning.patch \
  0082-Fix-pragma-warnings.patch \
  0083-math-pyhash-MINGW-support.patch \
  0084-tests-Fix-test-for-library-name.patch \
  0085-dictobject-MINGW-support.patch \
  0086-build-Fix-export-Py_GetBuildInfo-symbol.patch \
  0087-build-Allow-profile-tests-failure.patch \
  0088-build-add-support-for-building-C-modules.patch \
  0089-build-build-fix-the-wmi-module.patch \
  0090-Fix-exports-for-_suggestions-module.patch \
  0091-compileall-Normalize-paths.patch \
  0092-configure-enable-64-bit-time-support-for-32-bit-buil.patch \
  0093-configure-Work-around-broken-pc-file.patch \
  0094-makesetup-make-sure-a-library-path-is-passed-when-bu.patch \
  0095-venv-also-install-the-versioned-launchers.patch \
  0096-configure-set-_WIN32_WINNT-version.patch \
  0097-tests-fix-sysconfig.test_get_platform.patch \
  0098-pycore_time-fix-missing-timeval.patch \
  0099-mmapmodule-define-DONT_USE_SEH.patch \
  0100-build-Add-ABIFLAGS-to-targets-when-needed.patch \
  0101-sysconfig-patch-nt-schemes-again.patch \
  0102-configure-define-_PYTHREAD_NAME_MAXLEN-for-MINGW.patch \
  0103-configure-allow-older-autoconf.patch \
  0104-tests-allow-sys.abiflags-to-exist.patch \
  0105-configure-fix-AC_PATH_TOOL-usage.patch \
  0106-makesetup-make-sure-to-link-the-built-libpython.patch
 
  autoreconf -vfi
}

build() {
  declare -a _extra_config
  if check_option "debug" "n"; then
    _extra_config+=("--enable-optimizations")
    # Upstream defaults to -O3, so we can do too
    CFLAGS+=" -O3"
    # FIXME: https://github.com/msys2-contrib/cpython-mingw/issues/10
    if [[ $MINGW_PACKAGE_PREFIX == *-clang-* ]]; then
      _extra_config+=("--with-lto=full")
    fi
  else
    CFLAGS+=" -O0 -ggdb"
    CXXFLAGS+=" -O0 -ggdb"
    _extra_config+=("--with-pydebug")
  fi

  mkdir -p "${srcdir}/build-${MSYSTEM}" && cd "${srcdir}/build-${MSYSTEM}"

  ../Python-${pkgver}/configure \
    --prefix=${MINGW_PREFIX} \
    --host=${MINGW_CHOST} \
    --build=${MINGW_CHOST} \
    --enable-shared \
    --with-system-expat \
    --with-system-ffi \
    --with-system-libmpdec \
    --without-ensurepip \
    --enable-loadable-sqlite-extensions \
    --with-tzpath=${MINGW_PREFIX}/share/zoneinfo \
    "${_extra_config[@]}"

  make
}

check() {
  cd "${srcdir}/build-${MSYSTEM}"

  # Some basic tests to ensure nothing major or MSYS2 specific features are broken
  ./python.exe "../Python-${pkgver}/mingw_smoketests.py"
  MSYSTEM= ./python.exe "../Python-${pkgver}/mingw_smoketests.py"
}

package() {
  cd "${srcdir}/build-${MSYSTEM}"

  make -j1 install DESTDIR="${pkgdir}"

  # gdb pretty printers for debugging Python itself; to use:
  # python
  # sys.path.append('C:/msys64/mingw64/share/gdb/python3')
  # import python_gdb
  # reload(python_gdb)
  # end
  if [[ "${_primary_python}" == "yes" ]]; then
    [[ -d "${pkgdir}${MINGW_PREFIX}"/share/gdb/python3/ ]] || mkdir -p "${pkgdir}${MINGW_PREFIX}"/share/gdb/python3/
    cp -f python.exe-gdb.py "${pkgdir}${MINGW_PREFIX}"/share/gdb/python3/python_gdb.py
  fi

  # some useful "stuff"
  install -dm755 "${pkgdir}${MINGW_PREFIX}"/lib/python${_pybasever}/Tools/{i18n,scripts}
  install -m755 "${srcdir}/Python-${pkgver}"/Tools/i18n/{msgfmt,pygettext}.py "${pkgdir}${MINGW_PREFIX}"/lib/python${_pybasever}/Tools/i18n/
  install -m755 "${srcdir}/Python-${pkgver}"/Tools/scripts/{README,*py} "${pkgdir}${MINGW_PREFIX}"/lib/python${_pybasever}/Tools/scripts/

  # License
  install -Dm644 "${srcdir}/Python-${pkgver}/LICENSE" "${pkgdir}${MINGW_PREFIX}/share/licenses/${_realname}${_pybasever}/LICENSE"

  # PEP668
  install -Dm644 "${srcdir}/EXTERNALLY-MANAGED" -t "${pkgdir}${MINGW_PREFIX}/lib/python${_pybasever}/"

  # fixup shebangs
  for fscripts in idle3 idle${_pybasever} pydoc3 pydoc${_pybasever}; do
    sed -e '1 { s|^#!.*$|#!/usr/bin/env python'"${_pybasever}"'.exe| }' -i "${pkgdir}${MINGW_PREFIX}"/bin/${fscripts}
  done

  # default aliases for all scripts/binaries
  if [[ "${_primary_python}" == "yes" ]]; then
    # Default names are aliases for Python now
    cp "${pkgdir}${MINGW_PREFIX}"/bin/python3.exe "${pkgdir}${MINGW_PREFIX}"/bin/python.exe
    cp "${pkgdir}${MINGW_PREFIX}"/bin/python3w.exe "${pkgdir}${MINGW_PREFIX}"/bin/pythonw.exe
    cp "${pkgdir}${MINGW_PREFIX}"/bin/python3-config "${pkgdir}${MINGW_PREFIX}"/bin/python-config
    cp "${pkgdir}${MINGW_PREFIX}"/bin/idle3 "${pkgdir}${MINGW_PREFIX}"/bin/idle
    cp "${pkgdir}${MINGW_PREFIX}"/bin/pydoc3 "${pkgdir}${MINGW_PREFIX}"/bin/pydoc
  fi

  # delete anything that could conflict with the primary Python
  if [[ "${_primary_python}" != "yes" ]]; then
    rm "${pkgdir}${MINGW_PREFIX}"/bin/python3.exe
    rm "${pkgdir}${MINGW_PREFIX}"/bin/python3w.exe
    rm "${pkgdir}${MINGW_PREFIX}"/bin/python3-config
    rm "${pkgdir}${MINGW_PREFIX}"/bin/idle3
    rm "${pkgdir}${MINGW_PREFIX}"/bin/pydoc3
    rm "${pkgdir}${MINGW_PREFIX}"/bin/libpython3.dll
    rm "${pkgdir}${MINGW_PREFIX}"/lib/libpython3.dll.a
    rm "${pkgdir}${MINGW_PREFIX}"/lib/pkgconfig/python3-embed.pc
    rm "${pkgdir}${MINGW_PREFIX}"/lib/pkgconfig/python3.pc
    rm "${pkgdir}${MINGW_PREFIX}"/share/man/man1/python3.1
  fi
}

sha256sums=('d923c51303e38e249136fc1bdf3568d56ecb03214efdef48516176d3d7faaef8'
            '3981fed74ee7d43ad69bd67e634e03d7bf6890558a87062380112e195688728a'
            '34146e43ee6a8ffed09808ef3669d1986930687e9666e2965cbf775d5d3e76f3'
            'e2fcc4831fe796a7030364f0a5011a87de4b2377af80e6ddb08465fd54e420f7'
            '89b940c178258d37a0774d8567645477a56a4dfa9a3d758ad4e729fc6769459b'
            'a8bf8608a2122fcf796d6e8916e009bd13e916f8e96320f0ac2bd5f2f15c95c7'
            'da8aca0c362ae378efc9714b81215545cf7f3e87d5bf738b69f5468ac6962a03'
            'a593eb0dc74ec15c7d38f5fc5927a03480465a62f856b100661c8110eec553cb'
            '29d7548e4cc780b857a30062894c503b4dbad45b96cb5eeed1679799ce1c6c48'
            '1f426f80069df023d901c4cd53e09e67f44dc8ddcd5dd92e40f245deefc525fa'
            '51672f5db4b7a1a3e836f610a3fc0945fac2d989324292dfbe908e4b47881a79'
            'ab70a29872fcb24e605bd0b32f33bc0284db973db64cb4d9270256ade99d243f'
            '43847d8813f51ef6412499d21a35a4b556ccf4e832b6a16c47d3775a198ff9cc'
            '3dfd052ebceb076be81e215d8b0be2172f16628c8d8f7e058f0590f49243166e'
            '2f919fe2cbd7d87af5c3ef4c088b813f19e9250662f8611657a99c3cbdbb295d'
            'b8494e580c0a090cee69de52a080608a9e0411abf1231baa16ab6fae7bd81de9'
            'f222fa1cd15abd8e2e1c5ed8bcb7ff383c98ad5a5e592a4a746e710fca54aa99'
            'bb0e0539f1f962cf14790b92360158f27252c2865a4b3e87668ad7ee6d6f31c9'
            '4113f40599ab83cd5199f0eb598a6cde7c42482aa814f277e4bb8caab7800c29'
            '930021029452aaf027427719c9f5a85e929d75b993fd5056b955b365ea5b75b2'
            '7d4cbe9e81ae24b11aa63ed0642d5abf34ca7eed2b364cb307e227c214855e34'
            '56de41949642bf2a3f38e4b0d2a8891fb5a8ef26579a3a312c293df7996d269e'
            '06369c3892b700c187ec042ca40a0094f71c940e3687e700e229ee45a844ece3'
            '902fc3166128345e68b4496d1e3b037af3e9346bc3af87e7577bb0cc65d766d9'
            '03867a9b99ab3853929149ec73f92d04bc6fa01462fa296b47afeab235dd80b8'
            'e83699b497315499760c24fc27837fd3808ee463c074f52b0c46d2c48241eb79'
            'fe4333691d70e013f09a40a6202ea49ce3f0b4881da234fc4279ad9478740c58'
            '2b619528d775228b87dbbae30a0391ca80bb87756cd16626d2b2b757d9bde2c8'
            '50c1ad8cc66dcf9683b67451dcef576b0e054592e9603123818903cf367824fe'
            '0b4582d60ee1952f6d5e70beee3d6614f9a579b1b4dd14cb413340e4150724b3'
            'aff1316e6ee5f480352dd31765224f2f012e9706c1430f42a201d29fedf8b5ef'
            '91e7a1c6e679678e97254c687d9a9f2a9fdaf4dc3ed5c064b535c97cb7d11f22'
            '624c621c2c6e845deced541271b66406b43b872cbff404e1b2fd1c996c3255b2'
            'f755406aa8e09b2a3ca7bde6ac5dcb45914d4a9072c47bd5eb6b19898c5dd4b4'
            '53b137242aef0c775d3062e0ab280255e164af0bd46b798e1960090dcbca9bf7'
            '3b0c3e5425fde03e5002de7b36637ee4e0557f6f12f7412cf346fa4bfe9ae2b7'
            '5a782bd08ab4fdfb19673ab78c278a67355bb21a99663cb8e3eaeaec60b05e4d'
            '0db5d355758a78703552f40e87662a1801308a172dda7fb126b83c19016b5944'
            '563d3ff7dcf71b70652d8e95085c27281cdb902bbe1c96fc432d2c7b80f56f99'
            '78b5062b1619168ad0179abe2c77af93708e03af45d5603ac81487ce603b2131'
            '319f13e0d9e30722b2bdc2586ec6a2078fe0db46b372fce97fb3af21a4675951'
            '5d718dda8bf633421a75f2ac6fdcf1dccaccab14b29e7e142e0408a54b831738'
            'bca49c1c7d9bb4dd12de96c59f2344d5f8a8d92268fd3dc9fe43c99fdeb1d802'
            'ce23fd6adf5e700b9d016521085607a350d128660650cd7fbd239638e0296237'
            'd99cd11c7012e33dc82f339c48a535335893a7104cd44e301a915554306df2e1'
            'ecf97d84802abe4d2cec9572bf0ecdd75bb044e9e4f12d2c03631e0ce79189f7'
            'c79cda986998e89005dbacc278c390bb7214427743c6853513c73dedd2d70d87'
            'a025a50bde54d338c39df15bdad914e51f7cb74c996c062d55893594a6f4f7ec'
            '705a593bf5d75804b03f6da3fc76354c3733f5006249d47966ebee8ad8a4e985'
            '880c9ba8dfb989f262aa3efb863f38e5822c2555cbf7c37befa16f657bd1f2b5'
            'ceffe55ec888c3b0ba5527a5db785c5b7d0463188639dd715be801cff09fd1bf'
            '9d57f8bac2749024d24d278b498c08f4f3eaf63ab0b802b78e4f0528bdeb9424'
            '3b11b3f34190a72be0c828fc35d54059468932945bd83617af02f04acc8238a4'
            'e7944a2c8e3655a66f98cdb4e613ab4d13371e48157317cca69adaf3f004ccec'
            '197a39c3408cf55dd7bd661e41be20518c7921cf81fd6de69db66ec4716ea2f6'
            '3bdb9e0799688d68488bac9edd51bc5ce2145e9039357a7c13ce55a57ef2147f'
            'fbdeca0d45632e127b47305e52b8e2c34eb7d8bb3f345b901ab48076e1e7f3f5'
            '43a759bc5b82e536155abb621cc34cc5ce1662bf38281ed95e21f0f3dc3a1097'
            '55652c11747aa4e6c07753770d5359602c41114e4c3f0b5d7dcad46ce06ffb35'
            'b4e4996ac46bc67242af58888ab6b484aa58aef9a94b0295e3b25873da982370'
            '8d1acdaa3378641a726fb46e87ac374b4aa442fa524b0e90451c380d471ef616'
            '5319d8f2aa880d90d143efdd20fc31f93b33ba41ab674dd196cd60de17976eb5'
            '0704b218ccd6da0fa09edd02fe21f6f6f294d9338a9c14259443f2868e9119c7'
            'dd803a8fc3deecad8dbd8004b4eedf1a74267e032ef62be219d28991ebf3d5d8'
            'ea50e45fb5fe6bedffae2679753a506159184a96fa942cc637eca3af63530b1a'
            '04c8e4c696aefec2c3cf82f9c8c58ab9df8098667460f56a54868c74b95b9a6e'
            'b432294928057e801df8e65de1ea04e6326efb71aaf1ae10f223f09ab70b8b74'
            '998aba2be5b9aa096f1c3fe1939c10f4dd76170bce3fdcbb383b65a5d53153c7'
            '9bb160897af7f905fbab2bfa3b96c5174112daf8a52f2bfd91a8076accd1743d'
            '308fa69cdbcc0ab1554852c1e9a3eccd6295525b47f89d584a000296a35bee32'
            'ee23c7f2a53dc078459c60d5dde42a4fe403fb9f1e4b07f0165a956726810229'
            '9cf622ea53bac5448b978472bc26d417cfcb40402da2ee60156274ff156b8cc9'
            'a12a4e639f1905f19b9cdfe64a55baa401468c328575128349e0ecd6c7309936'
            'eb26fc6379e9d4b61a61d60b6174e6e402ab10bbb123bd4af3b05b71e116c766'
            '79a2a5fd4a2e5cad5b59a603f82a002c614c02c893878185d74b116aac050319'
            'a7297377546e05a14c0b25d27ef39eaed940d68b0afa7e0a2bf72b1b2a07c64a'
            'f253e7cf1eeaf8631e59edb1415f7934e5770d525b31455ce71e76a8e59deef3'
            '234bf2ceac7afc688ccb7d6f673515edd32d5ea8b009fc95b6d3d7add0829afb'
            'e2516f44c4ccccff3f1c4c1793df28271e8a91042b27b7d999617d24c6d9eab5'
            '3ee5815c15d4ddf2ad981a0bc142e7072705930e078caa842f3fb076c3154e00'
            '35f01ea50a96d43a71181485e066911c5af291356eaa7c4ee97aa9545fae2e59'
            '4ef58199397749a9bc2e3c702dfc4dda665eb41fcadb12733c059dbe8a273ca2'
            '2f6653308b2b069ea950dd1edf529cf3c0997e3453b4f5a66d4fc8fe4a705084'
            '7ab2aac89cbaab9aeff3b8098933d8f81ccef4b31c6d183fe5fabecaadc345f9'
            'f8c28f45541b5d6440cf10d03a6e2a8a2d025ba804bba4966496350b178dcf54'
            '716be0e083685400b98c9fed50e4a042e640f8a4faf829fd0c2c29e69d4374d9'
            'b5528da80d0ca70bcc48dcd683ae0c7f5879be3028e99da92ab4334f8d8f3d3f'
            '42dd38e8d2e20912d4443e38890eeccfa75829fe6b98fe1798ce2cae13f7cf53'
            '88ed099b9184b6625f3c6b705021c0913875dafeb31589ffe864779a14c73649'
            'bf2a80e80cd3e38a31dc50a70dff804ed4ccfdf16156f4bc22076e158d25ef03'
            'f7c3a0a8e8802740f9a1e074d81514460a6ab370b4b1a3d93a35e90e234dbb62'
            '63eb3c7dabeaedba0432bcef42e9e6e77f21265678c4fd42948acd9de8b70959'
            'f7bec30e66bac70ef4545f95654a0e7d2e0764eea73f4f5dcec5f67db9759c48'
            'b9bf104c81f4050ea62e68f12b384a3c4a4169c929a19e8b49144ab4a39eee47'
            'a0d48e2e41f785a7061dabea7f30db08a822b27c9c68444294aa4bbf13380e04'
            '59daad9c6b163289f03e0799dce962889a8ec2753b260f84534058b0783644a3'
            '1d7c868e116b55110ed8a39262976bfabc1a6ab9ee3609d387075b480917d46d'
            'a677035e084b8f6ef5fcea0902b8f88b255430c16a2d83f921dfe32b9a2d2da4'
            '2dc196b838d2e991fa91affce0ac217a5c4adbbc8e259c1564ed0af081f35e76'
            '87c12f4bcb4208e49fa13e0d661d6a9143637bc8a77f180b23229fe4e1970c44'
            'bf91f9f07cb91167c6340b96a72bf2f847e78987600f0dd4215ca2859ded2b1d'
            '22c2e52e5c20fab79e63bddc580d6ddf4788cb89375fc15a778e2ee56f75d26b'
            'b886cc6d20cc88a73ad1af70bfef2aebd99f43f0aaf287ccf671eff7a445100d'
            '91a9f15e80a67692f3cb7b87c6a762e04975dee0328b2726b5683df067a44e29'
            '0e6779f0d45a63b5182709d736efc60938a36387fbb232ae7c0fe9bbab7a8f7b'
            'f3b3f2abb2fe2f7a4d052c5f5ee61c5ea9326e69627e3d480998df53c9b44357'
            'bf8cbe62894c1d30f813a25a43d4c5ccb9ca1de4ccc5e39e38e4a3f5d7805a45'
            'a6c7cb8de86cd97aea95840fe75bc8ff1d0951239a0bb490773682b88115333c')
